package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.CheckGroupDao;
import com.itheima.entity.PageResult;
import com.itheima.pojo.CheckGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: bowen
 * @Date: 2019/7/13 15:45
 * @Description:检查组服务类
 */
@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {

	@Autowired
	CheckGroupDao checkGroupDao;

	/**
	 *  @描述：新增检查组
	 */
	public void add(CheckGroup checkGroup, Integer[] checkitemIds) {
	//	 新增基本信息（检查组表操作）
		checkGroupDao.add(checkGroup);
	//	获取新增检查组的id
		Integer id = checkGroup.getId();
		//   建立检查组id和检查项id的关联关系（中间表操作）
		setRelationsBetweenCheckgroupAndCheckItem(checkitemIds,id);

	}

	/**
	 *  @描述：分页查询
	 */
	public PageResult findPage(Integer currentPage, Integer pageSize, String queryString) {
		PageHelper.startPage(currentPage,pageSize);
		Page<CheckGroup> checkGroups =  checkGroupDao.findPage(queryString);
		return new PageResult(checkGroups.getTotal(), checkGroups.getResult());
	}

	/**
	 *  @描述：根据id查询基本信息
	 */
	public CheckGroup findById(Integer id) {
		return checkGroupDao.findById(id);
	}

	/**
	 *  @描述：根据检查组id查询检查项id集合
	 */
	public Integer[] findRelationsById(Integer id) {
		return checkGroupDao.findRelationsById(id);
	}

	/**
	 *  @描述：编辑检查组
	 */
	public void edit(CheckGroup checkGroup, Integer[] checkitemIds) {
	//	更新基本信息（检查组表）
		checkGroupDao.edit(checkGroup);
		Integer id = checkGroup.getId();
		//	删除原有的关联信息（中间表）
		checkGroupDao.deleteRelations(id);
	//	追加新增的关联信息（中间表）
		setRelationsBetweenCheckgroupAndCheckItem(checkitemIds, id);
	}

	/**
	 *  @描述：查询所有检查组
	 */
	public List<CheckGroup> findAll() {
		return checkGroupDao.findAll();
	}


	/**
	 *  @描述：建立检查组和检查项之间的关联关系
	 */
	private void setRelationsBetweenCheckgroupAndCheckItem(Integer[] checkitemIds, Integer id) {
		// 普通的ForEach  Map传递
		//for (Integer item:checkitemIds){
		//	Map map = new HashMap();
		//	map.put("checkGroupId",id);
		//	map.put("checkItemId",item);
		//	checkGroupDao.addRelationBetweenCheckGroupAndCheckItem(map);
		//}
	    //	2.使用lambda表达式
 	   //	3.用传参的方式

		//for (Integer item:checkitemIds){
		//	checkGroupDao.addRelationBetweenCheckGroupAndCheckItem2(id,item);
		//}
		//4.mybatis的forEach
		checkGroupDao.addRelationBetweenCheckGroupAndCheckItem3(id,checkitemIds);


	}
}
